Skip to content

Major zTalkBox Progress#725

Merged
JoshSanch merged 20 commits intobfbbdecomp:mainfrom
AARJL:main
Mar 1, 2026
Merged

Major zTalkBox Progress#725
JoshSanch merged 20 commits intobfbbdecomp:mainfrom
AARJL:main

Conversation

@AARJL
Copy link
Contributor

@AARJL AARJL commented Mar 1, 2026

100% matched all but 13 functions in zTalkBox.cpp
Ensured DWARF local variables were used when possible
Reordered many functions to be aligned with objdiff where possible

Many of the smaller data sections were matched including StringBase and rodata as a whole
Made changes to zTalkBox.h along with some other files that zTalkBox.cpp relied on such as xEnt.h, containers.h, xFont.h, xSnd.h, and zTextBox.h

AARJL and others added 14 commits December 21, 2025 17:46
    All other functions in zTalkBox.cpp have a 100% match
    Made sure all functions use DWARF local variables when possible
Reordered functions in zTalkBox to try to match objdiff, not all are in the correct order but most are
Completed .bss (8f38) with 100% match
Completed .ctors (4) with 100% match
Completed .data (118) with 100% match
Completed .rodata (1c8) with 100% match
Completed .sbss (20) with 100% match
Completed .sbss2 (8) with 100% match
Completed .sdata (10) with 100% match
Completed .sdata2 (20) with 100% match but [.sdata2-0] is still at 85%
.text (3434) is at a 98% match
.text (224) is at a 96% match
.text (1bc) has 4 100% macthes and one 73% match
Remaining functions in zTalkBox.cpp have 100% match
Made sure all functions use DWARF local variables when possible
Reordered functions in zTalkBox to try to match objdiff, not all are in the correct order but most are
Completed .bss (8f38) with 100% match
Completed .ctors (4) with 100% match
Completed .data (118) with 100% match
Completed .rodata (1c8) with 100% match
Completed .sbss (20) with 100% match
Completed .sbss2 (8) with 100% match
Completed .sdata (10) with 100% match
Completed .sdata2 (20) with 100% match but [.sdata2-0] is still at 85%
.text (3434) is at a 98% match
.text (224) is at a 96% match
.text (1bc) has 4 100% macthes and one 73% match
    Modified it to get some matches but caused a small regression
    I will work through the regression after the PR is discuseed
Removed redundant structs from zTalkBox.h causing errors in other files
@github-actions

This comment was marked as outdated.

Copy link
Collaborator

@JoshSanch JoshSanch left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lots of progress with this one - left some initial comments while I spend some time reviewing zTalkBox.cpp.

Thanks for the submission!

  Now has a 100% match with fixed_queue<aqua_beam::ring_segment, 31>::iterator::operator+=(int)
  and with fixed_queue<@unnamed@zTalkBox_cpp@::trigger_pair, 32>::iterator::operator+=(int)
Reverted zTalkBox.cpp DWARF to it's original state
@github-actions

This comment was marked as outdated.

@github-actions

This comment was marked as outdated.

AARJL and others added 2 commits March 1, 2026 03:29
    As a bonus, also got a 100% match here
Updated MasterLovesSlaves to use correct Base tags
Updated .xSnd.h and moved sound_queue methods into the template class
Other minor cleanups
@github-actions

This comment was marked as outdated.

@github-actions
Copy link

github-actions bot commented Mar 1, 2026

main/SB/Game/zTalkBox

Section From To Bytes
.bss 99.59% 100.00% +152
.data 6.58% 100.00% +261
.rodata 15.48% 100.00% +385
.sbss 0.00% 100.00% +32
.sbss2 0.00% 100.00% +8
.sdata 0.00% 100.00% +16
.sdata2 42.86% 100.00% +18
📈 .text 22.19% 96.27% +10665
Function From To Bytes
@unnamed@zTalkBox_cpp@::trigger(unsigned int) 78.67% 100.00% +28
@unnamed@zTalkBox_cpp@::flush_triggered() 3.33% 100.00% +116
@unnamed@zTalkBox_cpp@::load_wait_context(@unnamed@zTalkBox_cpp@::wait_context&, const xtextbox::tag_entry_list&) 0.00% 100.00% +680
@unnamed@zTalkBox_cpp@::parse_tag_auto_wait(xtextbox::jot&, const xtextbox&, const xtextbox&, const xtextbox::split_tag&) 0.00% 100.00% +224
@unnamed@zTalkBox_cpp@::wait_context::operator=(const @unnamed@zTalkBox_cpp@::wait_context&) 0.00% 100.00% +44
@unnamed@zTalkBox_cpp@::parse_tag_signal(xtextbox::jot&, const xtextbox&, const xtextbox&, const xtextbox::split_tag&) 0.00% 100.00% +328
📈 @unnamed@zTalkBox_cpp@::trigger_signal(const xtextbox::jot&) 0.00% 99.38% +190
@unnamed@zTalkBox_cpp@::load_sound_type(@unnamed@zTalkBox_cpp@::sound_context&, const xtextbox::tag_entry_list&) 0.00% 100.00% +176
📈 @unnamed@zTalkBox_cpp@::parse_tag_sound(xtextbox::jot&, const xtextbox&, const xtextbox&, const xtextbox::split_tag&) 0.00% 99.47% +819
📈 @unnamed@zTalkBox_cpp@::trigger_sound(const xtextbox::jot&) 0.00% 94.91% +611
@unnamed@zTalkBox_cpp@::parse_tag_allow_quit(xtextbox::jot&, const xtextbox&, const xtextbox&, const xtextbox::split_tag&) 0.00% 100.00% +108
@unnamed@zTalkBox_cpp@::parse_tag_teleport(xtextbox::jot&, const xtextbox&, const xtextbox&, const xtextbox::split_tag&) 0.00% 100.00% +304
@unnamed@zTalkBox_cpp@::move_player(const xVec3&) 0.00% 100.00% +84
@unnamed@zTalkBox_cpp@::turn_player(float) 0.00% 100.00% +92
@unnamed@zTalkBox_cpp@::trigger_teleport(const xtextbox::jot&) 0.00% 100.00% +104
@unnamed@zTalkBox_cpp@::parse_tag_trap(xtextbox::jot&, const xtextbox&, const xtextbox&, const xtextbox::split_tag&) 99.63% 100.00% +/-0
@unnamed@zTalkBox_cpp@::trigger_trap(const xtextbox::jot&) 0.00% 100.00% +64
@unnamed@zTalkBox_cpp@::parse_tag_wait(xtextbox::jot&, const xtextbox&, const xtextbox&, const xtextbox::split_tag&) 0.00% 100.00% +160
@unnamed@zTalkBox_cpp@::trigger_wait(const xtextbox::jot&) 0.00% 100.00% +112
📈 @unnamed@zTalkBox_cpp@::start_audio_effect(ztalkbox&) 0.00% 91.70% +205
📈 @unnamed@zTalkBox_cpp@::stop_audio_effect() 32.14% 87.38% +46
@unnamed@zTalkBox_cpp@::activate(ztalkbox&) 0.00% 100.00% +132
@unnamed@zTalkBox_cpp@::is_wait_jot(const xtextbox::jot&) 0.00% 100.00% +44
@unnamed@zTalkBox_cpp@::layout_contains_streams() 0.00% 100.00% +196
@unnamed@zTalkBox_cpp@::lock_stream() 0.00% 100.00% +108
@unnamed@zTalkBox_cpp@::unlock_stream() 0.00% 100.00% +104
📈 @unnamed@zTalkBox_cpp@::refresh_prompts() 0.00% 96.48% +339
@unnamed@zTalkBox_cpp@::update_prompt_status(float) 0.00% 100.00% +156
@unnamed@zTalkBox_cpp@::update_quit_status(float) 0.00% 100.00% +92
@unnamed@zTalkBox_cpp@::hide_prompts() 0.00% 100.00% +80
@unnamed@zTalkBox_cpp@::stop_wait(ztalkbox&, const float*, unsigned long) 0.00% 100.00% +156
@unnamed@zTalkBox_cpp@::cb_dispatch(xBase*, xBase*, unsigned int, const float*, xBase*) 90.36% 100.00% +40
ztalkbox::set_text(const char*) 0.00% 100.00% +224
ztalkbox::set_text(unsigned int) 0.00% 100.00% +92
ztalkbox::add_text(const char*) 0.00% 100.00% +84
ztalkbox::add_text(unsigned int) 0.00% 100.00% +80
ztalkbox::start_talk(const char*, ztalkbox::callback*, zNPCCommon*) 0.00% 100.00% +388
ztalkbox::start_talk(unsigned int, ztalkbox::callback*, zNPCCommon*) 0.00% 100.00% +124
@unnamed@zTalkBox_cpp@::stop() 0.00% 100.00% +192
ztalkbox::show() 47.33% 100.00% +75
ztalkbox::MasterTellSlaves(int) 0.00% 100.00% +156
ztalkbox::MasterLoveSlave(xBase*, int) 0.00% 100.00% +196
ztalkbox::load_settings(xIniFile&) 95.96% 100.00% +4
📈 ztalkbox::init() 0.00% 77.58% +186
@unnamed@zTalkBox_cpp@::stop_state_type::stop_state_type() 0.00% 100.00% +64
@unnamed@zTalkBox_cpp@::wait_state_type::wait_state_type() 0.00% 100.00% +64
@unnamed@zTalkBox_cpp@::next_state_type::next_state_type() 0.00% 100.00% +64
@unnamed@zTalkBox_cpp@::start_state_type::start_state_type() 0.00% 100.00% +64
📈 ztalkbox::update_all(xScene&, float) 0.00% 95.57% +355
@unnamed@zTalkBox_cpp@::pad_pressed() 0.00% 100.00% +56
ztalkbox::render_all() 0.00% 100.00% +160
ztalkbox::reset_all() 0.00% 100.00% +128
📈 @unnamed@zTalkBox_cpp@::start_state_type::start() 0.00% 97.14% +136
📈 @unnamed@zTalkBox_cpp@::next_state_type::start() 0.00% 90.83% +348
@unnamed@zTalkBox_cpp@::trigger_jot(int) 0.00% 100.00% +68
@unnamed@zTalkBox_cpp@::trigger_jot(const xtextbox::jot&) 0.00% 100.00% +76
@unnamed@zTalkBox_cpp@::next_state_type::update(xScene&, float) 0.00% 100.00% +40
@unnamed@zTalkBox_cpp@::wait_state_type::start() 0.00% 100.00% +40
📈 @unnamed@zTalkBox_cpp@::wait_state_type::stop() 0.00% 93.40% +269
@unnamed@zTalkBox_cpp@::wait_state_type::update(xScene&, float) 0.00% 100.00% +556
fixed_queue<@unnamed@zTalkBox_cpp@::trigger_pair, 32>::iterator::operator+=(int) 47.18% 100.00% +23
fixed_queue<@unnamed@zTalkBox_cpp@::trigger_pair, 32>::push_back() 0.00% 100.00% +40
fixed_queue<@unnamed@zTalkBox_cpp@::trigger_pair, 32>::empty() const 0.00% 100.00% +24
fixed_queue<@unnamed@zTalkBox_cpp@::trigger_pair, 32>::pop_front() 0.00% 100.00% +40
fixed_queue<@unnamed@zTalkBox_cpp@::trigger_pair, 32>::front() 0.00% 100.00% +48
fixed_queue<@unnamed@zTalkBox_cpp@::trigger_pair, 32>::begin() const 0.00% 100.00% +36
fixed_queue<@unnamed@zTalkBox_cpp@::trigger_pair, 32>::reset() 0.00% 100.00% +32
fixed_queue<@unnamed@zTalkBox_cpp@::trigger_pair, 32>::clear() 0.00% 100.00% +16
sound_queue<4>::pop() 0.00% 100.00% +100
sound_queue<4>::clear() 0.00% 100.00% +68

main/SB/Game/zNPCTypePrawn

Section From To Bytes
.text 40.80% 40.80% +/-0
Function From To Bytes
fixed_queue<aqua_beam::ring_segment, 31>::iterator::operator+=(int) 98.17% 100.00% +/-0

I moved it to the front, but it caused ObjDiff to not recongize the functions.
@github-actions
Copy link

github-actions bot commented Mar 1, 2026

main/SB/Game/zTalkBox

Section From To Bytes
.bss 99.59% 100.00% +152
.data 6.58% 100.00% +261
.rodata 15.48% 100.00% +385
.sbss 0.00% 100.00% +32
.sbss2 0.00% 100.00% +8
.sdata 0.00% 100.00% +16
.sdata2 42.86% 100.00% +18
📈 .text 22.19% 98.13% +10932
Function From To Bytes
@unnamed@zTalkBox_cpp@::trigger(unsigned int) 78.67% 100.00% +28
@unnamed@zTalkBox_cpp@::flush_triggered() 3.33% 100.00% +116
@unnamed@zTalkBox_cpp@::load_wait_context(@unnamed@zTalkBox_cpp@::wait_context&, const xtextbox::tag_entry_list&) 0.00% 100.00% +680
@unnamed@zTalkBox_cpp@::parse_tag_auto_wait(xtextbox::jot&, const xtextbox&, const xtextbox&, const xtextbox::split_tag&) 0.00% 100.00% +224
@unnamed@zTalkBox_cpp@::wait_context::operator=(const @unnamed@zTalkBox_cpp@::wait_context&) 0.00% 100.00% +44
@unnamed@zTalkBox_cpp@::parse_tag_signal(xtextbox::jot&, const xtextbox&, const xtextbox&, const xtextbox::split_tag&) 0.00% 100.00% +328
📈 @unnamed@zTalkBox_cpp@::trigger_signal(const xtextbox::jot&) 0.00% 99.38% +190
@unnamed@zTalkBox_cpp@::load_sound_type(@unnamed@zTalkBox_cpp@::sound_context&, const xtextbox::tag_entry_list&) 0.00% 100.00% +176
📈 @unnamed@zTalkBox_cpp@::parse_tag_sound(xtextbox::jot&, const xtextbox&, const xtextbox&, const xtextbox::split_tag&) 0.00% 99.47% +819
📈 @unnamed@zTalkBox_cpp@::trigger_sound(const xtextbox::jot&) 0.00% 94.91% +611
@unnamed@zTalkBox_cpp@::parse_tag_allow_quit(xtextbox::jot&, const xtextbox&, const xtextbox&, const xtextbox::split_tag&) 0.00% 100.00% +108
@unnamed@zTalkBox_cpp@::parse_tag_teleport(xtextbox::jot&, const xtextbox&, const xtextbox&, const xtextbox::split_tag&) 0.00% 100.00% +304
@unnamed@zTalkBox_cpp@::move_player(const xVec3&) 0.00% 100.00% +84
@unnamed@zTalkBox_cpp@::turn_player(float) 0.00% 100.00% +92
@unnamed@zTalkBox_cpp@::trigger_teleport(const xtextbox::jot&) 0.00% 100.00% +104
@unnamed@zTalkBox_cpp@::parse_tag_trap(xtextbox::jot&, const xtextbox&, const xtextbox&, const xtextbox::split_tag&) 99.63% 100.00% +/-0
@unnamed@zTalkBox_cpp@::trigger_trap(const xtextbox::jot&) 0.00% 100.00% +64
@unnamed@zTalkBox_cpp@::parse_tag_wait(xtextbox::jot&, const xtextbox&, const xtextbox&, const xtextbox::split_tag&) 0.00% 100.00% +160
@unnamed@zTalkBox_cpp@::trigger_wait(const xtextbox::jot&) 0.00% 100.00% +112
📈 @unnamed@zTalkBox_cpp@::start_audio_effect(ztalkbox&) 0.00% 91.70% +205
📈 @unnamed@zTalkBox_cpp@::stop_audio_effect() 32.14% 87.38% +46
@unnamed@zTalkBox_cpp@::activate(ztalkbox&) 0.00% 100.00% +132
@unnamed@zTalkBox_cpp@::is_wait_jot(const xtextbox::jot&) 0.00% 100.00% +44
@unnamed@zTalkBox_cpp@::layout_contains_streams() 0.00% 100.00% +196
@unnamed@zTalkBox_cpp@::lock_stream() 0.00% 100.00% +108
@unnamed@zTalkBox_cpp@::unlock_stream() 0.00% 100.00% +104
📈 @unnamed@zTalkBox_cpp@::refresh_prompts() 0.00% 96.48% +339
@unnamed@zTalkBox_cpp@::update_prompt_status(float) 0.00% 100.00% +156
@unnamed@zTalkBox_cpp@::update_quit_status(float) 0.00% 100.00% +92
@unnamed@zTalkBox_cpp@::hide_prompts() 0.00% 100.00% +80
@unnamed@zTalkBox_cpp@::stop_wait(ztalkbox&, const float*, unsigned long) 0.00% 100.00% +156
@unnamed@zTalkBox_cpp@::cb_dispatch(xBase*, xBase*, unsigned int, const float*, xBase*) 90.36% 100.00% +40
ztalkbox::set_text(const char*) 0.00% 100.00% +224
ztalkbox::set_text(unsigned int) 0.00% 100.00% +92
ztalkbox::add_text(const char*) 0.00% 100.00% +84
ztalkbox::add_text(unsigned int) 0.00% 100.00% +80
ztalkbox::start_talk(const char*, ztalkbox::callback*, zNPCCommon*) 0.00% 100.00% +388
ztalkbox::start_talk(unsigned int, ztalkbox::callback*, zNPCCommon*) 0.00% 100.00% +124
@unnamed@zTalkBox_cpp@::stop() 0.00% 100.00% +192
ztalkbox::show() 47.33% 100.00% +75
ztalkbox::MasterTellSlaves(int) 0.00% 100.00% +156
ztalkbox::MasterLoveSlave(xBase*, int) 0.00% 100.00% +196
ztalkbox::load_settings(xIniFile&) 95.96% 100.00% +4
📈 ztalkbox::init() 0.00% 77.58% +186
@unnamed@zTalkBox_cpp@::stop_state_type::stop_state_type() 0.00% 100.00% +64
@unnamed@zTalkBox_cpp@::wait_state_type::wait_state_type() 0.00% 100.00% +64
@unnamed@zTalkBox_cpp@::next_state_type::next_state_type() 0.00% 100.00% +64
@unnamed@zTalkBox_cpp@::start_state_type::start_state_type() 0.00% 100.00% +64
📈 ztalkbox::update_all(xScene&, float) 0.00% 95.57% +355
@unnamed@zTalkBox_cpp@::pad_pressed() 0.00% 100.00% +56
ztalkbox::render_all() 0.00% 100.00% +160
ztalkbox::reset_all() 0.00% 100.00% +128
📈 @unnamed@zTalkBox_cpp@::start_state_type::start() 0.00% 97.14% +136
📈 @unnamed@zTalkBox_cpp@::next_state_type::start() 0.00% 90.83% +348
@unnamed@zTalkBox_cpp@::trigger_jot(int) 0.00% 100.00% +68
@unnamed@zTalkBox_cpp@::trigger_jot(const xtextbox::jot&) 0.00% 100.00% +76
@unnamed@zTalkBox_cpp@::next_state_type::update(xScene&, float) 0.00% 100.00% +40
@unnamed@zTalkBox_cpp@::wait_state_type::start() 0.00% 100.00% +40
📈 @unnamed@zTalkBox_cpp@::wait_state_type::stop() 0.00% 93.40% +269
@unnamed@zTalkBox_cpp@::wait_state_type::update(xScene&, float) 0.00% 100.00% +556
fixed_queue<@unnamed@zTalkBox_cpp@::trigger_pair, 32>::iterator::operator+=(int) 47.18% 100.00% +23
fixed_queue<@unnamed@zTalkBox_cpp@::trigger_pair, 32>::push_back() 0.00% 100.00% +40
fixed_queue<@unnamed@zTalkBox_cpp@::trigger_pair, 32>::empty() const 0.00% 100.00% +24
fixed_queue<@unnamed@zTalkBox_cpp@::trigger_pair, 32>::pop_front() 0.00% 100.00% +40
fixed_queue<@unnamed@zTalkBox_cpp@::trigger_pair, 32>::front() 0.00% 100.00% +48
fixed_queue<@unnamed@zTalkBox_cpp@::trigger_pair, 32>::begin() const 0.00% 100.00% +36
fixed_queue<@unnamed@zTalkBox_cpp@::trigger_pair, 32>::reset() 0.00% 100.00% +32
fixed_queue<@unnamed@zTalkBox_cpp@::trigger_pair, 32>::clear() 0.00% 100.00% +16
sound_queue<4>::pop() 0.00% 100.00% +100
📈 sound_queue<4>::size() const 0.00% 73.12% +23
sound_queue<4>::clear() 0.00% 100.00% +68
sound_queue<4>::playing(int, bool) const 0.00% 100.00% +212
sound_queue<4>::recent(int) const 0.00% 100.00% +32

main/SB/Game/zNPCTypePrawn

Section From To Bytes
.text 40.80% 40.80% +/-0
Function From To Bytes
fixed_queue<aqua_beam::ring_segment, 31>::iterator::operator+=(int) 98.17% 100.00% +/-0

@JoshSanch JoshSanch merged commit ce57a90 into bfbbdecomp:main Mar 1, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants